package com.example.springbooteasycode.zjrc.project.special.command34;

/**
 * 要实现将打印的 ASCII 码字符串每两个字符转换为一个byte
 *
 *
 *
 *
 * 输入：ASCII 字符串（如日志中打印的F461B42FBEE3394F），长度为 16（每两个字符对应一个byte）。
 * 输出：byte[]数组，长度为 8，每个元素由两个 ASCII 字符解析为十六进制字节。
 */
public class AsciiToByte {
    public static void main(String[] args) {
        // 示例ASCII字符串（对应日志中的数据）
        String asciiStr = "F461B42FBEE3394F";

        byte[] result = asciiToByte(asciiStr);

        System.out.println("原始ASCII字符串: " + asciiStr);
        System.out.println("转换后byte数组长度: " + result.length);
        System.out.print("转换后byte数组: ");
        for (byte b : result) {
            System.out.print(String.format("%02X ", b)); // 十六进制格式打印，便于验证
        }
        System.out.println(new String(result));
    }

    /**
     * 将ASCII字符串（每两个字符为一个十六进制字节）转换为byte数组
     */
    public static byte[] asciiToByte(String asciiStr) {
        // 步骤1：校验长度（必须为偶数，确保每两个字符对应一个byte）
        if (asciiStr.length() % 2 != 0) {
            throw new IllegalArgumentException("ASCII字符串长度必须为偶数");
        }

        // 步骤2：遍历字符串，每两个字符解析为一个byte
        byte[] bytes = new byte[asciiStr.length() / 2];
        for (int i = 0; i < asciiStr.length(); i += 2) {
            String hexSub = asciiStr.substring(i, i + 2);
            bytes[i / 2] = (byte) Integer.parseInt(hexSub, 16);
        }

        return bytes;
    }
}
